package br.ufpi.hu.prescricao.managedbeans;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;

import br.ufpi.hu.prescricao.facade.UserFacade;
import br.ufpi.hu.prescricao.model.Usuario;
import br.ufpi.hu.prescricao.model.Usuario;
import br.ufpi.hu.prescricao.util.ErrorHelper;

@SessionScoped
@ManagedBean
public class UserMB {

	private Usuario user;

	@EJB
	private UserFacade userFacade;

	@Inject
	private ErrorHelper errorHelper;

	private static final String ATUALIZAR_DADOS = "atualizarDados";
	private static final String MESMA_PAGINA = "";

	private static final String SUCESSO = "Dados atualizados com sucesso!";
	private static final String ERRO = "Erro ao atualizar dados, tente novamente.";

	public Usuario getUser() throws NamingException {

		if(user == null){

			ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
			
			if (context.getUserPrincipal()==null) {
				logOut(); //sessao inválida ou acesso a pagina sem logar
			}
			
			String login = context.getUserPrincipal().getName();

			user = userFacade.findUserByLogin(login);
			
			userFacade.setUsuarioAtual(user);

		}

		return user;
	}

	public boolean isUserAdmin() throws NamingException {

		if (user==null) 
		{
			logOut(); //sessao inválida ou acesso a pagina sem logar
			
		}

		getUser();
		return userFacade.isUsuarioAtualAdmin();
	}

	public String atualizarDados() {

		return ATUALIZAR_DADOS;
	}

	public String atualizar() {

		try {

			userFacade.update(user);

		} 

		catch (Exception e) {
			e.printStackTrace();
			errorHelper.sendErrorMessageToUser(ERRO);
			return MESMA_PAGINA;
		}

		errorHelper.sendInfoMessageToUser(SUCESSO); 

		return MESMA_PAGINA; //mesma pagina

	}

	public String logOut() {
		getRequest().getSession().invalidate();
		return "logout";
	}

	private HttpServletRequest getRequest() {
		return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
	}
	
}